home *** CD-ROM | disk | FTP | other *** search
- # UserId.pm
- # - providing an object-oriented approach to GnuPG user ids
- #
- # Copyright (C) 2000 Frank J. Tobin <ftobin@cpan.org>
- #
- # This module is free software; you can redistribute it and/or modify it
- # under the same terms as Perl itself.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- #
- # $Id: UserId.pm,v 1.7 2001/08/21 13:31:50 ftobin Exp $
- #
-
- package GnuPG::UserId;
- use Any::Moose;
-
- has [qw( validity as_string )] => (
- isa => 'Any',
- is => 'rw',
- );
-
- has signatures => (
- isa => 'ArrayRef',
- is => 'rw',
- default => sub { [] },
- );
- has revocations => (
- isa => 'ArrayRef',
- is => 'rw',
- default => sub { [] },
- );
-
- sub push_signatures {
- my $self = shift;
- push @{ $self->signatures }, @_;
- }
- sub push_revocations {
- my $self = shift;
- push @{ $self->revocations }, @_;
- }
-
- sub compare {
- my ( $self, $other, $deep ) = @_;
-
- my @comparison_ints = qw( validity as_string );
-
- foreach my $field ( @comparison_ints ) {
- return 0 unless $self->$field() eq $other->$field();
- }
-
- return 0 unless @{$self->signatures} == @{$other->signatures};
- return 0 unless @{$self->revocations} == @{$other->revocations};
-
- # FIXME: is it actually wrong if the associated signatures come out
- # in a different order on the two compared designated revokers?
- if (defined $deep && $deep) {
- for ( my $i = 0; $i < scalar(@{$self->signatures}); $i++ ) {
- return 0
- unless $self->signatures->[$i]->compare($other->signatures->[$i], 1);
- }
- for ( my $i = 0; $i < scalar(@{$self->revocations}); $i++ ) {
- return 0
- unless $self->revocations->[$i]->compare($other->revocations->[$i], 1);
- }
- }
-
- return 1;
- }
-
-
- # DEPRECATED
- sub user_id_string {
- my ( $self, $v ) = @_;
- $self->as_string($v) if defined $v;
- return $self->as_string();
- }
-
- __PACKAGE__->meta->make_immutable;
-
- 1;
-
- __END__
-
- =head1 NAME
-
- GnuPG::UserId - GnuPG User ID Objects
-
- =head1 SYNOPSIS
-
- # assumes a GnuPG::PublicKey object in $publickey
- my $user_id = $publickey->user_ids_ref->[0]->as_string;
-
- =head1 DESCRIPTION
-
- GnuPG::UserId objects are generally not instantiated on their
- own, but rather as part of GnuPG::PublicKey or GnuPG::SecretKey
- objects.
-
- =head1 OBJECT METHODS
-
- =over 4
-
- =item new( I<%initialization_args> )
-
- This methods creates a new object. The optional arguments are
- initialization of data members;
-
- =item compare( I<$other>, I<$deep> )
-
- Returns non-zero only when this User ID is identical to the other
- GnuPG::UserID. If $deep is present and non-zero, the User ID's
- signatures and revocations will also be compared.
-
- =back
-
- =head1 OBJECT DATA MEMBERS
-
- =over 4
-
- =item as_string
-
- A string of the user id.
-
- =item validity
-
- A scalar holding the value GnuPG reports for the trust of authenticity
- (a.k.a.) validity of a key.
- See GnuPG's DETAILS file for details.
-
- =item signatures
-
- A list of GnuPG::Signature objects embodying the signatures
- on this user id.
-
- =item revocations
-
- A list of revocations associated with this User ID, stored as
- GnuPG::Signature objects (since revocations are a type of
- certification as well).
-
- =back
-
- =head1 SEE ALSO
-
- L<GnuPG::Signature>,
-
- =cut
-